/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package lpii;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Calendar;
import java.util.logging.Level;
import java.util.logging.Logger;
import lpii.clases.Administrador;
import lpii.clases.DiaPago;
import lpii.clases.Empleado;

/**
 *
 * @author
 */
public class LPII {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        Administrador adm = new Administrador();
        int opt1 = 0 , opt2 , opt3;

        Empleado empleado;

        String dni, nombre, apellidoPaterno, apellidoMaterno;
        int tipoTrabajador;

        //DiaPago dp;

        do {
            System.out.println("Ingrese un número de opción");
            System.out.println("1]Empleados");
            System.out.println("2]Reportes");
            System.out.println("3]Salir");
            try {
                opt1 = Integer.parseInt(in.readLine());

                switch (opt1) {
                    case 1:
                        do {
                            System.out.println("\nIngrese un número de opción");
                            System.out.println("1]Registar Entrada/Salida");
                            System.out.println("2]Registar Empleado");
                            System.out.println("3]Modificar Datos");
                            System.out.println("4]Activar o Desactivar Modificaciones");
                            System.out.println("5]Habilitar, Deshabilitar, Borrar Empleado");
                            System.out.println("6]Volver al menu principal");

                            opt2 = Integer.parseInt(in.readLine());

                            switch (opt2) {
                                case 1:
                                    System.out.println("\nIngrese un número de opción");
                                    System.out.println("1]Entrada");
                                    System.out.println("2]Salida");

                                    opt3 = Integer.parseInt(in.readLine());


                                    System.out.print("Ingrese DNI: ");
                                    dni = in.readLine();

                                    if (adm.BuscarEmpleado(dni) != null) {
                                        switch (opt3) {
                                            case 1:
                                                //dp = new DiaPago(dni, Calendar.getInstance());
                                                adm.RegistrarHoraEntrada(dni, Calendar.getInstance());
                                                break;
                                            case 2:
                                                adm.RegistrarHoraSalida(dni, Calendar.getInstance());
                                                break;
                                        }
                                    }
                                    break;
                                case 2:
                                    System.out.print("Ingrese DNI: ");
                                    dni = in.readLine();

                                    System.out.print("Ingrese nombres: ");
                                    nombre = in.readLine();

                                    System.out.print("Ingrese apellido paterno: ");
                                    apellidoPaterno = in.readLine();

                                    System.out.print("Ingrese apellido materno: ");
                                    apellidoMaterno = in.readLine();

                                    System.out.println("Ingrese el tipo de trabajador");
                                    System.out.println("1]Jefe");
                                    System.out.println("2]Secretaria");
                                    System.out.println("3]Técnico");
                                    System.out.println("4]Servicio");
                                    tipoTrabajador = Integer.parseInt(in.readLine());

                                    adm.RegistrarEmpleado(dni, nombre, apellidoPaterno, apellidoMaterno, tipoTrabajador);
                                    break;
                                case 3:
                                    System.out.print("Ingrese DNI del empleado (Este no se modificará): ");
                                    dni = in.readLine();
                                    empleado = adm.BuscarEmpleado(dni);
                                    if (empleado != null) {
                                        if (!empleado.isEstaDatosBloqueado()) {
                                            System.out.print("Ingrese nombres actualizados: ");
                                            nombre = in.readLine();

                                            System.out.print("Ingrese apellido paterno actualizado: ");
                                            apellidoPaterno = in.readLine();

                                            System.out.print("Ingrese apellido materno actualizado: ");
                                            apellidoMaterno = in.readLine();


                                            System.out.println("Ingrese el tipo de trabajador actualizado");
                                            System.out.println("1]Jefe");
                                            System.out.println("2]Secretaria");
                                            System.out.println("3]Técnico");
                                            System.out.println("4]Servicio");
                                            tipoTrabajador = Integer.parseInt(in.readLine());

                                            adm.ModificarDatosEmpleado(dni, nombre, apellidoPaterno, apellidoMaterno, tipoTrabajador);
                                        } else {
                                            System.out.println("El empleado tiene bloqueado cualquier modificación");
                                        }
                                    } else {
                                        System.out.println("El DNI no esta registrado");
                                    }
                                    break;
                                case 4:
                                    System.out.print("Ingrese DNI del empleado: ");
                                    dni = in.readLine();

                                    empleado = adm.BuscarEmpleado(dni);
                                    if (empleado != null) {
                                        System.out.println("Elija el número de su opción");
                                        System.out.println("1]Bloquear modificacones");
                                        System.out.println("2]Desbloquear modificacones");
                                        opt2 = Integer.parseInt(in.readLine());

                                        switch (opt2) {
                                            case 1:
                                                adm.CambiarBloquearDatos(dni, true);
                                                break;
                                            case 2:
                                                adm.CambiarBloquearDatos(dni, false);
                                                break;
                                            default:
                                                System.out.println("Opción inválida");
                                                break;
                                        }
                                    } else {
                                        System.out.println("El DNI no esta registrado");
                                    }
                                    break;
                                case 5:
                                    System.out.print("Ingrese DNI del empleado: ");
                                    dni = in.readLine();
                                    empleado = adm.BuscarEmpleado(dni);
                                    if (empleado != null) {
                                        System.out.println("Elija el número de su opción");
                                        System.out.println("1]Habilitar");
                                        System.out.println("2]Deshabilitar");
                                        System.out.println("3]Eliminar Difinitivamente");
                                        opt2 = Integer.parseInt(in.readLine());

                                        switch (opt2) {
                                            case 1:
                                                adm.CambiarEstadoTrabajo(dni, true);
                                                break;
                                            case 2:
                                                adm.CambiarEstadoTrabajo(dni, false);
                                                break;
                                            case 3:
                                                adm.EliminarEmpleado(dni);
                                                break;
                                            default:
                                                System.out.println("Opción inválida");
                                                break;
                                        }
                                    } else {
                                        System.out.println("El DNI no esta registrado");
                                    }
                                    break;
                                case 6:
                                    break;
                                default:
                                    System.out.println("Opción inválida");
                                    break;
                            }
                        } while (opt2 != 6);
                        break;
                    case 2:
                        do {
                            System.out.println("\nIngrese un número de opción");
                            System.out.println("1]Un reporte de tardanzas de cada trabajador, y con información de "
                                    + "su equivalente en dinero");
                            System.out.println("2]Un reporte en orden descendente por tipo de trabajador de su "
                                    + "sueldo neto percibido durante el mes");
                            System.out.println("3]Un reporte con el detalle de un trabajador de su sueldo bruto "
                                    + "deducciones y neto obtenido durante el mes ingresando al sistema "
                                    + "el dni de trabajador");
                            System.out.println("4]Volver al menu principal");
                            opt2 = Integer.parseInt(in.readLine());

                            switch (opt2) {
                                case 1:
                                    System.out.println("Reporte de tardanzas de empleados en el mes");
                                    System.out.println(adm.ReporteTardanzas());
                                    break;
                                case 2:
                                    System.out.println("Reporte de empleados en orden descendente por tipo de empleado");
                                    System.out.println(adm.ReporteEnOrden());
                                    break;
                                case 3:
                                    System.out.print("Ingrese DNI del empleado: ");
                                    dni = in.readLine();
                                    if (adm.BuscarEmpleado(dni)!=null) {
                                        System.out.println(adm.ReportePorDni(dni));
                                    } else {
                                        System.out.println("El DNI no esta registrado");
                                    }
                                    break;
                                case 4:
                                    break;
                                default:
                                    System.out.println("Opción inválida");
                                    break;
                            }
                        } while (opt2 != 4);
                        break;
                    case 3:
                        break;
                    default:
                        System.out.println("Opción inválida");
                        break;
                }
            } catch (IOException ex) {
                Logger.getLogger(LPII.class.getName()).log(Level.SEVERE, null, ex);
            }
        } while (opt1 != 3);
        adm.TerminarDia();
    }
}